package Servicios;

import DAO.DAOCarrera;
import DAO.DAOProgramaEducativo;
import Dominio.Asignatura;
import Dominio.AsignaturaOptativa;
import Dominio.Carrera;
import Dominio.ProgramaEducativo;
import Dominio.ReticulaAcademica;
import Dominio.Semestre;
import java.io.*;
import java.util.ArrayList;
import java.util.Locale;
import jxl.*;
import jxl.biff.CountryCode;

public class LectorExcelDeReticulaAcademica {
    private ArrayList<Semestre> semestres;
    private ArrayList<AsignaturaOptativa> asignaturasOptativas;
    
    public LectorExcelDeReticulaAcademica() {
        asignaturasOptativas = new ArrayList<AsignaturaOptativa>(); 
    }
    
    public ReticulaAcademica leerReticulaAcademica(String archivo){
        try{
            WorkbookSettings wbSettings = new WorkbookSettings();
            wbSettings.setEncoding("ISO-8859-1");
            wbSettings.setLocale(new Locale("es", "ES"));
            wbSettings.setExcelDisplayLanguage("ES"); wbSettings.setExcelRegionalSettings("ES");
            wbSettings.setCharacterSet(CountryCode.SPAIN.getValue());
            Workbook archivoReticula = Workbook.getWorkbook(new File(archivo),wbSettings);
            if(archivoReticula.getNumberOfSheets()>0){
                Sheet hoja = archivoReticula.getSheet(0);
                int numeroFilas = hoja.getRows();
                int numeroColumnas = hoja.getColumns();
                if(numeroFilas >1 && numeroColumnas > 1){
                    semestres = new ArrayList<Semestre>();
                    for(int i=0;i<numeroColumnas;i++){
                        Semestre semestre = new Semestre(i);
                        semestre.setNombre(hoja.getCell(i, 0).getContents().toUpperCase());
                        for(int j=1;j<numeroFilas;j++){
                            String nombreAsignatura = hoja.getCell(i, j).getContents().toUpperCase();
                            if(!nombreAsignatura.equals("")) {
                                Asignatura asignatura = new Asignatura(nombreAsignatura);
                                semestre.agregarAsignatura(asignatura);
                            }
                        }
                        semestres.add(semestre);
                    }
                    if(archivoReticula.getNumberOfSheets()>1){
                        Sheet optativas = archivoReticula.getSheet(1);
                        int numFilas = optativas.getRows();
                        int numColumnas = optativas.getColumns();
                        if(numFilas>1 && numColumnas==2){
                            this.asignaturasOptativas = new ArrayList<AsignaturaOptativa>();
                            for(int k=1;k<numFilas;k++){
                                AsignaturaOptativa optativa = new AsignaturaOptativa(optativas.getCell(0,k ).getContents().toUpperCase(),optativas.getCell(1,k ).getContents().toUpperCase());
                                this.asignaturasOptativas.add(optativa);
                            }
                        }
                    }
                    if(this.asignaturasOptativas.size()>0){
                        return new ReticulaAcademica(hoja.getName().toUpperCase(),semestres,this.asignaturasOptativas);
                    }else{
                        return new ReticulaAcademica(hoja.getName().toUpperCase(),semestres);
                    }
                }
                else{
                    System.out.println("Archivo no válido para importación de retícula.");
                    return null;
                }                
            }
            else{
                System.out.println("Archivo no válido para importación de retícula.");
                return null;
            }
        } catch (Exception ioe) { 
            ioe.printStackTrace();           
        }
        return null;
    }
    
    
    public static void main(String arg[]) { 
        LectorExcelDeReticulaAcademica lector = new LectorExcelDeReticulaAcademica();
        ReticulaAcademica ra = lector.leerReticulaAcademica("D:\\reticulaPrueba.xls");
        System.out.println(ra.toString());
        DAOProgramaEducativo daoPrograma = new DAOProgramaEducativo();
        DAOCarrera daoCarrera = new DAOCarrera();
        ArrayList<Carrera> carreras = daoCarrera.buscarTodasLasCarreras();
        Carrera carrera = carreras.get(0);
        ProgramaEducativo programa = new ProgramaEducativo("LIS FLEXIBLE V1",carrera,ra);
        daoPrograma.registrarProgramaEducativo(programa);
        
    } 
}
